﻿/*
 * @Autor: PK
 * @Date: 2021/9/17
 * @Description: 输出数据包括：仿真结果、仿真过程数据，可能的形式有：单个变量、数组、列表
 * 车站：车辆统计信息：平均值、最大值、最小值、顾客拒绝率、
 * 道路：车辆统计信息：平均值、最大值、最小值、平均旅行时间
 * 车辆/顾客：充电时间、服务时间比例、成本、收入、拒绝情况、车辆调度率、人员驾驶率、人员调度率、人/车调度次数
 * count观察器：终值、持续值的平均/极值/方差、
 */

using System.Collections.Generic;
using ShkSimulation.core.dao.output.result;
using ShkSimulation.core.dao.statistic;
using ShkSimulation.core.template.model;

namespace ShkSimulation.core.template {
    public interface NetworkResultCollector : SimulationResultReporter{
	    
        IReadOnlyDictionary<string, Result> AllOutputData { get; }
        
        DataReporterGenerator DataReporterGenerator { get; set; }
        
        Dictionary<DataReporterCollection, ResultListener> ReporterAndListener { get; }
        
        Dictionary<string, DataReporterCollection> ReporterCollections { get; }
        
        Dictionary<string, List<DataReporter>> AllDataReporters { get; set; }

        NetworkResultCollector Clone();

        void InitStatistics(Network network);

        public void RegisterStatistic(DataReporterCollection collection, ResultListener reporterToListener);

        public void ReplaceAndRegisterStatistic(Dictionary<DataReporterCollection, ResultListener> reporterToListeners);

        public void RemoveAllStatistic();
        
        public void RemoveStatistic(string reporterUniqueKey);

    }
}
